package day3;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class Homework {
    public static void main(String[] args) {
        demo4();
    }
    //a.复制一个1G左右的视频文件显示复制所花的时间
    //显示百分比  10%  20% ...100%成功
    public static void demo1(){
        File f=new File("d://io//唯一.mp4");
        try(FileInputStream fis=new FileInputStream(f);
            FileOutputStream fos=new FileOutputStream("d://io//abc.mp4");
            BufferedInputStream bis=new BufferedInputStream(fis);
            BufferedOutputStream bos=new BufferedOutputStream(fos);
        ){
            long begin=System.currentTimeMillis();
            long sum=f.length(); //视频总字节数
            long read=0; //已经读取得字节数
            int n=1;
            byte[] bs=new byte[1024];
            int len=0;
            while((len=bis.read(bs))!=-1){
                read+=len;
                bos.write(bs,0,len);
                if(read>=sum/100*n){
                    long end=System.currentTimeMillis();
                    System.out.println("复制了"+n+"%,耗时:"+(end-begin)+"ms");
                    n++;
                }
            }
            long end=System.currentTimeMillis();
            System.out.println("复制成功,耗时:"+(end-begin)+"ms");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    //b.统计一个文件testIO.txt  中字母'A'和'a'出现的总次数
    public static void demo2(){
        File f=new File("d://io//io.txt");
        int resultA=0;
        int resulta=0;
        try(FileInputStream fis=new FileInputStream(f)){
            for(int i=0;i<f.length();i++){
                char n=(char)fis.read();
                if(n=='A') resultA++;
                else if(n=='a') resulta++;
            }
            System.out.println("A次数:"+resultA);
            System.out.println("a次数:"+resulta);
            System.out.println("总次数:"+(resultA+resulta));
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    //b.统计一个文本文件中各个字母出现次数：
    //     * A(8),B(16),C(10)...,a(12),b(10),c(3)....，括号内代表字符出现次数;
    //      统计结束后写入到一个result.txt中显示结果
    public static void demo3(){
        try(FileInputStream fis=new FileInputStream("d://io//io.txt");
            FileOutputStream fos=new FileOutputStream("d://io//result.txt")
        ){
            //统计每个字符次数:map集合(key(char)-value(次数int))
            //集合泛型不支持基本类型 只能写对象类型
            Map<Character,Integer> map=new HashMap<>();
            byte[] bs=new byte[1024];
            int len=0;
            while((len=fis.read(bs))!=-1){
                String s=new String(bs,0,len);
                for(int i=0;i<s.length();i++){
                   char ch=s.charAt(i);
                   //如果key存在  次数+1
                   if(map.containsKey(ch)) map.put(ch,map.get(ch)+1);
                   //如果key不存在  次数=1
                   else map.put(ch,1);
                }
            }
            //处理写入得 结果字符串
            StringBuilder sb=new StringBuilder("最终结果是:字符(次数)\n");
            for(Character key:map.keySet()){
                Integer value=map.get(key);
                sb.append(key+"("+value+")\n");
            }
            //写入结果字符串
            fos.write(sb.toString().getBytes());
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public static void demo4(){
        try(FileReader fis=new FileReader("d://io//io.txt");
            FileWriter fos=new FileWriter("d://io//result.txt")
        ){
            //统计每个字符次数:map集合(key(char)-value(次数int))
            //集合泛型不支持基本类型 只能写对象类型
            Map<Character,Integer> map=new HashMap<>();
            char[] bs=new char[1024];
            int len=0;
            while((len=fis.read(bs))!=-1){
                for(int i=0;i<len;i++){
                    char ch=bs[i];
                    //如果key存在  次数+1
                    if(map.containsKey(ch)) map.put(ch,map.get(ch)+1);
                    //如果key不存在  次数=1
                    else map.put(ch,1);
                }
            }
            //处理写入得 结果字符串
            StringBuilder sb=new StringBuilder("最终结果是:字符(次数)\n");
            for(Character key:map.keySet()){
                Integer value=map.get(key);
                sb.append(key+"("+value+")\n");
            }
            //写入结果字符串
            fos.write(sb.toString());
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
